<!DOCTYPE html>
<html lang="en">

<head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=<device-width>, initial-scale=1.0">
        <title>Document</title>
</head>

<body>
        <script>
                /* let 新增加的声明变量的关键字，与var声明变量有以下不同 */

                // let 声明的变量有严格局部作用域
                // var 声明的变量往往会越域
                {
                        var a = 102;
                        let b = 2;
                }
                console.log(a);  // 102
                console.log(b);  // ReferenceError: b is not defined

                // var 可以声明多次
                // let 只能声明一次
                var m = 1
                var m = 2
                let n = 3
                let n = 4
                console.log(m)  // 2
                console.log(n)  // Identifier 'n' has already been declared

                // var 会变量提升
                // let 不存在变量提升
                console.log(x);  // undefined
                var x = 10;
                console.log(y);   // ReferenceError: Cannot access 'y' before initialization
                let y = 20;

                /*
                  一但声明必须初始化，否则会报错
                  声明之后不允许改变
                  */
                const b = 1;
                b = 3; //Uncaught TypeError: Assignment to constant variable.
        </script>
</body>

</html>